package com.itany.corejava.code11_线程;

/**
 * @author MissChen
 * @date 2024年03月12日 15:56
 */
public class Test09_同步方法 {
    public static void main(String[] args) {
        // OneThread2 t1=new OneThread2();
        // OneThread2 t2=new OneThread2();
        // t1.setName("t1");
        // t2.setName("t2");
        // t1.start();
        // t2.start();

        OneThread3 one=new OneThread3();
        Thread t1=new Thread(one);
        Thread t2=new Thread(one);
        t1.start();
        t2.start();

    }
}

class OneThread2 extends Thread {
    static int num = 100;



    @Override
    public void run() {
        while (true) {
            if(method()){
                break;
            }


        }
    }

    //同步方法的锁对象不能自己指定
    // 1.如果是普通方法，指的是当前this实例
    // 2.如果是静态方法，指的所在类的字节码文件对象,类名.class
    public static synchronized boolean method(){
        if (num == 0) {
            return true;
        } else {
            try {
                Thread.sleep(10);
                System.out.println(Thread.currentThread().getName() + "正在出票" + num--);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
        return false;
    }

}
class OneThread3 implements Runnable{
    static int num = 100;

    @Override
    public void run() {
        while (true) {
            if(method()){
                break;
            }


        }
    }

    //同步方法的锁对象不能自己指定
    // 1.如果是普通方法，指的是当前this实例
    // 2.如果是静态方法，指的所在类的字节码文件对象
    public  synchronized boolean method(){
        if (num == 0) {
            return true;
        } else {
            try {
                Thread.sleep(10);
                System.out.println(Thread.currentThread().getName() + "正在出票" + num--);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
        return false;
    }

}